import axios from 'axios';
import store from '../store';

import { Message } from 'ant-design-vue'

// 创建axios
var http = axios.create({ timeout: 1000 * 12 ,withCredentials: true});
/** 
 * 错误提示
 */
const tipError = err => {  
  Message.error(err)
}
const logError = err => {
  console.log(err);  
}

// http request 拦截器

http.interceptors.request.use(
  config => {
    const token = store.state.common.token.str;//localStorage.token    
    token && (config.headers.Authorization = 'Basic ' + token);
    return config;
  },
  error => {
    return Promise.reject(error);
  }
);

// http response 拦截器
// 响应拦截器
http.interceptors.response.use(
  //200 请求成功
  res => {
    store.commit('NETWORK', true)
    if(res.status === 200){      
      return Promise.resolve(res)
    }else{
      return Promise.reject(res)
    }
  },
  error => {
    const { response } = error;
    if (response) {
      // 请求已发出，但是不在2xx的范围 
      store.commit('NETWORK', true)
      errorHandle(response.status, error.config, response.data.message);
      return Promise.reject(response);
    } else {
      // 处理断网的情况      
      if (store.state.common.network || error.config.method != "get"){
        tipError("QiarAI服务连接超时！");
      }
      store.commit('NETWORK', false)
    }
  }
);
/** 
 * 请求失败后的错误统一处理 
 * @param {Number} status 请求失败的状态码
 */
const errorHandle = (status, config, other) => {
  // 状态码判断  
  switch (status) {
    // 401: token过期或无效，需要刷新
    case 400:
      //console.log(config);
      tipError(other);
      break;
    case 401:
      //logError(other);
      break;
    // 403 token无效，无法刷新
    // 清除token并跳转登录页
    case 403:
      //logError('token无效，请重新登录');
      break;
    // 404请求不存在
    case 404:
      logError('请求的资源不存在');
      break;
    default:
      //console.log(other);
  }
}

export default http;